package com.auicyh.tylb.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import java.util.List;

/**
 * 作者：  Ocean 2018/8/28 14:35
 * 信息：  Oil com.auicyh.tylb.adapter
 * 功能：  自定义基础的适配器(适用于ListView和GradView)
 * 邮箱：   1126067113@qq.com
 * 修改人：
 * 公司: 北京天元陆兵汽车科技有限公司
 * @author Ocean
 */
public abstract class BaseCustomAdapter<T> extends BaseAdapter {
    /** 布局填充墙 */
    private LayoutInflater mLayoutInflater;
    /** 数据集合 */
    private List<T> mListData;
    /** 布局资源ID */
    private int mLayoutId;
    /** 上下文 */
    private Context mContext;

    /**
     * 工作方法
     * @param context  上下文
     * @param listData 数据
     * @param layoutId 布局id
     */
    public BaseCustomAdapter(Context context, List<T> listData, int layoutId) {
        mLayoutInflater = LayoutInflater.from(context);
        mListData = listData;
        mLayoutId = layoutId;
        mContext = context;
    }


    @Override
    public int getCount() {
        return mListData != null ? mListData.size() : 0;
    }

    @Override
    public Object getItem(int position) {
        return mListData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mLayoutInflater.inflate(mLayoutId, parent, false);
        }
        ViewHolder viewHolder = ViewHolder.getInstance();
        onConvert(viewHolder, convertView, (T) getItem(position), position);
        return convertView;
    }

    public void upData(List<T> data) {
        mListData = data;
        notifyDataSetChanged();
    }

    /**
     * 这个方法对空间进行赋值处理
     * @param viewHolder  viewHolder,用于获取对象
     * @param convertView convertView
     * @param itemData    itemData 单个数据
     * @param position    第几个
     */
    protected abstract void onConvert(ViewHolder viewHolder, View convertView, T itemData, int position);
}
